﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using GC2.Bussines;
using GC2.Bussines.BMAdmin;
using GC2.Entities.Admin;
using GC2.ExceptionHandler;
using System.IO;
using System.Diagnostics;
using System.Threading;

public partial class Documentos_DocumentosAdmin : GenericPage
{
    #region Propiedades
    Usuarios usuario = new Usuarios();
    Documentos documentoActual = new Documentos();
    List<Documentos> listDocumentos = new List<Documentos>();
    private ExceptionConstructor exNew = new ExceptionConstructor();
    #endregion

    #region Controles

    protected void Page_Load(object sender, EventArgs e)
    {
        SetearCultura();
        SetearConexion();
        if (!IsPostBack)
        {
            usuario = (Usuarios)Session["UsuarioActual"];
            Clientes cliente = new Clientes();
            cliente = (Clientes)Session["Cliente"];
            lblCliente.Text = cliente.Nombre;

            FechaH.SetFecha(DateTime.Now);
            
            string sFecha = "01/";

            DateTime dHoy = DateTime.Now.Date;
 
            sFecha += dHoy.Month.ToString();
            sFecha+= "/";
            sFecha += dHoy.Year.ToString();

            FechaD.SetFecha(Convert.ToDateTime(sFecha));
        }
    }


    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        try
        {
            Actualizar();
            CargarGrilla();

        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        Session["Accion"] = 1;
        Response.Redirect("DocumentosGestion.aspx", false);
    }

    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Seguridad/Default.aspx", false);
    }

    protected void gvDocumentos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvDocumentos.PageIndex = e.NewPageIndex;
        CargarGrilla();
    }

    protected void gvDocumentos_RowDeleting(object sender, GridViewDeleteEventArgs e)
    {
        try
        {
            documentoActual = new Documentos();
            Label label = new Label();
            label = (Label)gvDocumentos.Rows[e.RowIndex].Cells[0].FindControl("IdDocumento");

            documentoActual.IdDocumento = Int64.Parse(label.Text.Trim());
            documentoActual.IdCliente = ((Clientes)Session["Cliente"]).IdCliente;

            //Elimina Registro y actualiza la Grilla
            BMDocumentos bmDocumentos = new BMDocumentos(Connection);
            bmDocumentos.BMDocumentosDelete(documentoActual);
            Actualizar();
            CargarGrilla();

            label = null;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }

    protected void gvDocumentos_SelectedIndexChanged(object sender, EventArgs e)
    {

            try
            {
                // Obtiene Documento
                Documentos documento = new Documentos();

                documento.IdDocumento = Convert.ToInt64(gvDocumentos.SelectedDataKey.Value);
                listDocumentos = (List<Documentos>)Session["listDocumentos"];
                foreach (Documentos item in listDocumentos)
                {
                    if (item.IdDocumento == documento.IdDocumento)
                    {
                        documento.Documento = item.Documento;
                        documento.Nombre += item.Nombre;
                        
                        // adjunto.Nombre_Adjunto = item.Nombre_Adjunto;
                        break;
                    }
                }

                string infoDoc =  DesSerializar(documento); 

                string scriptSession = @"<script language='JavaScript'>window.open('../Download.aspx?a=" + infoDoc + "','Download','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbar=no,resizable=no,width=1,height=1,left=0,top=0')</script>";

                Page.ClientScript.RegisterStartupScript(this.GetType(), "ScriptDL", scriptSession);

            }
            catch (System.UnauthorizedAccessException exr) { throw exr; }
            catch (Exception ex) { ErrorUI(ex); }
    }

    #endregion

    #region Métodos

    #region Actualizar
    private void Actualizar()
    {
        try
        {
            BMDocumentos bmDocumentos = new BMDocumentos(Connection);

            Documentos documentoD = new Documentos();
            Documentos documentoH = new Documentos();

            documentoD.Fecha = FechaD.GetFecha();
            documentoH.Fecha = FechaH.GetFecha();
            documentoD.IdCliente = ((Clientes)Session["Cliente"]).IdCliente; 

            listDocumentos = bmDocumentos.BMDocumentosSearch(documentoD, documentoH);

            Session["listDocumentos"] = listDocumentos;
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region CargarGrilla
    private void CargarGrilla()
    {
        try
        {
            listDocumentos = (List<Documentos>)Session["listDocumentos"];
            gvDocumentos.DataSource = listDocumentos;
            gvDocumentos.DataBind();
        }
        catch (Exception ex) { ErrorUI(ex); }
    }
    #endregion

    #region DesSerializar
    protected string DesSerializar(Documentos documento)
    {
        try
        {
            string archivo;
            archivo = ConfigurationManager.AppSettings["Path_AgregarDocumento"]; //Environment.GetEnvironmentVariable("TEMP") + "\\";

            archivo += documento.Nombre;
            if (File.Exists(archivo)) { File.Delete(archivo); }

            FileStream fs = new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.Write);
            Byte[] imagen = new Byte[10000];
            //imagen = (Byte[])Session["imgbin"];
            imagen = documento.Documento;

            BinaryWriter bw = new BinaryWriter(fs);
            bw.Write(imagen, 0, imagen.Length - 1);
            bw.Flush();
            bw.Close();

            FileInfo infoDoc = new FileInfo(archivo);

            fs = null;
            imagen = null;
            bw = null;

            return infoDoc.Name;
        }
        catch (ThreadAbortException aex) { throw aex; }
        catch (Exception ex) { throw ex; }
    }
    #endregion

    #endregion

}
